﻿Imports Commander_Wars.Spieletools
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Public Class ObjektCreditMenue
    Inherits ObjektFormMenue
    Dim HeadlineText As ObjektText
    Dim AutorenText As ObjektText
    Public Abschnitte() As Abschnitt = {}
    Dim HeadlinePosition As Integer = 0
    Dim AutorenPosition As Integer = 0
    Dim FramesProText As Integer = 0
    Structure Abschnitt
        Dim Headline As String
        Dim Autoren() As String
        Dim StartX As Integer()
        Public Sub New(ByVal Headline As String, ByVal Autoren As String(), ByVal AutorenText As ObjektText, ByVal HeadlineText As ObjektText)
            Me.Headline = Headline
            Me.Autoren = Autoren
            Array.Resize(StartX, Autoren.Length + 1)
            Grafikengine.Sprite.Transform = Matrix.Identity
            StartX(0) = DataSettings.BildschirmBreite / 2 - HeadlineText.GetSchriftart.MeasureString(Grafikengine.Sprite, Headline, Microsoft.DirectX.Direct3D.DrawTextFormat.None, Color.Black).Width / 2
            For I = 0 To Autoren.Length - 1
                StartX(I + 1) = DataSettings.BildschirmBreite / 2 - AutorenText.GetSchriftart.MeasureString(Grafikengine.Sprite, Autoren(I), Microsoft.DirectX.Direct3D.DrawTextFormat.None, Color.Black).Width / 2
            Next
        End Sub
        Public Sub WindowSizeChange(ByVal XChange As Integer)
            For I = 0 To StartX.Length - 1
                StartX(I) += XChange
            Next
        End Sub
    End Structure
    Dim Frames As Integer = 0
    Dim FramesMax As Integer
    Dim MaxAnzeige As Integer
    Dim Einheiten As AnimationLaufen() = {}
    Dim YMax As Integer = 0
    Dim XMax As Integer = 0
    Public Sub New(ByVal Datei As String)
        ObjektMaus.Zustand = ObjektMaus.Zustaende.Menue
        If DataSettings.Verhaeltnis = Hauptmenue.Breitbild Then
            Objektverwalter.LoadHintergrund(DataSettings.Resourcenpfad + "Backgrounds\HM1280a800.bmp")
        Else
            Objektverwalter.LoadHintergrund(DataSettings.Resourcenpfad + "Backgrounds\HM800a600.bmp")
        End If

        AutorenText = New ObjektText(New String() {}, 20, DataSettings.BildschirmHoehe - 100, Nothing, Schriftengine.Schriftarten.Comic_Sans_MS, 15, FontStyle.Bold)
        HeadlineText = New ObjektText(New String() {}, 20, DataSettings.BildschirmHoehe - 100, Nothing, Schriftengine.Schriftarten.Comic_Sans_MS_Bold, 25, FontStyle.Bold)
        Dim TextZahl As Integer = 0
        'Die Credit-Datei auslesen
        Using Reader As New IO.StreamReader(DataSettings.Resourcenpfad + "Credits\" + Datei + ".cred", Hauptmenue.Codierung)
            While Not Reader.EndOfStream
                Dim Z As String = Reader.ReadLine.Trim
                If Z.ToLower.StartsWith("headline:") Then
                    TextZahl += 1
                    Dim H As String = Z.Remove(0, Z.IndexOf(":") + 1)
                    Dim Autoren() As String = {}
                    While Not Reader.EndOfStream
                        Dim Z1 As String = Reader.ReadLine.Trim
                        If Z1.ToLower.StartsWith("end") Then
                            Exit While
                        End If
                        If Z1.StartsWith("'") Then
                            Continue While
                        End If
                        TextZahl += 1
                        Array.Resize(Autoren, Autoren.Length + 1)
                        Autoren(Autoren.Length - 1) = Z1
                    End While
                    Array.Resize(Abschnitte, Abschnitte.Length + 1)
                    Abschnitte(Abschnitte.Length - 1) = New Abschnitt(H, Autoren, AutorenText, HeadlineText)
                    Continue While
                End If
                If Z.StartsWith("'") Then
                    Continue While
                End If
            End While
        End Using
        FramesProText = DataSettings.BildschirmHoehe / 2
        FramesMax = FramesProText + (TextZahl) * 10
        MaxAnzeige = DataSettings.BildschirmHoehe / 18
        NeuButton(DataSettings.BildschirmBreite / 2 - 52, DataSettings.BildschirmHoehe - 60, DataSettings.Resourcenpfad + "Objects\Button.png", "Beenden", New PointF(0.5#, 1))
        Array.Resize(Einheiten, 50)
        YMax = Math.DivRem(DataSettings.BildschirmHoehe, 16, 0)
        XMax = Math.DivRem(DataSettings.BildschirmBreite, 16, 0)
        For I = 0 To Einheiten.Length - 1
            Dim Z As Integer = Zufallszahl(0, 12)
            Select Case Z
                Case 0
                    Einheiten(I) = New AnimationLaufen(New EinheitInfanterie(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 1
                    Einheiten(I) = New AnimationLaufen(New EinheitInfanterie(-1, 0, 0, ), Armeen.BM.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 2
                    Einheiten(I) = New AnimationLaufen(New EinheitInfanterie(-1, 0, 0, ), Armeen.GE.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 3
                    Einheiten(I) = New AnimationLaufen(New EinheitInfanterie(-1, 0, 0, ), Armeen.YC.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 4
                    Einheiten(I) = New AnimationLaufen(New EinheitInfanterie(-1, 0, 0, ), Armeen.BH.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 5
                    Einheiten(I) = New AnimationLaufen(New EinheitJagdpanzer(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 6
                    Einheiten(I) = New AnimationLaufen(New EinheitArtillerie(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 7
                    Einheiten(I) = New AnimationLaufen(New EinheitKampfpanzer(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 8
                    Einheiten(I) = New AnimationLaufen(New EinheitTitanpanzer(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 9
                    Einheiten(I) = New AnimationLaufen(New EinheitMegapanzer(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 10
                    Einheiten(I) = New AnimationLaufen(New EinheitBomber(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 11
                    Einheiten(I) = New AnimationLaufen(New EinheitJaeger(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
                Case 12
                    Einheiten(I) = New AnimationLaufen(New EinheitKampfpanzer(-1, 0, 0, ), Armeen.OS.ToString, Hauptmenue.AlleFarbtabellen(Zufallszahl(0, Hauptmenue.AlleFarbtabellen.Length - 1)), New Integer() {0}, New Integer() {0}, New Point(Zufallszahl(0, XMax), Zufallszahl(0, YMax)))
                    NextZufallsWeg(I)
            End Select
        Next
    End Sub
    Private Sub NextZufallsWeg(ByVal E As Integer)
        Dim WX(3) As Integer
        Dim WY(3) As Integer

        WX(3) = Einheiten(E).Position.X
        WY(3) = Einheiten(E).Position.Y
        For I = 0 To 2
            If Zufallszahl(1, 100) > 50 Then
                WX(2 - I) = Zufallszahl(0, XMax)
                WY(2 - I) = WY(3 - I)
            Else
                WX(2 - I) = WX(3 - I)
                WY(2 - I) = Zufallszahl(0, YMax)
            End If



        Next
        Einheiten(E).NeuerWeg(WX, WY)
    End Sub
    Public Overrides Sub Frame()
        Frames += 1
        If Frames >= FramesMax Then
            Hauptmenue.Ini(Hauptmenue.Formmodi.Hauptmenue)
        End If
    End Sub

    Public Overrides Sub IniMenue()

    End Sub

    Public Overrides Sub KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        KeyDownObjekte(sender, e)
    End Sub

    Public Overrides Sub Malen()
        Objektverwalter.VorHinBildmalen(Objektverwalter.texturHintergrungBild)
        For I = 0 To Einheiten.Length - 1
            If Einheiten(I).Laufen = True Then
                NextZufallsWeg(I)
            End If
            Einheiten(I).Einheitmalen()
        Next

        Dim YPos As Integer = 10

        YPos = DataSettings.BildschirmHoehe - 2 * Frames

        Dim Gemalt As Integer = 0
        For I = 0 To Abschnitte.Length - 1
            For I2 = 0 To Abschnitte(I).Autoren.Length

                If I2 = 0 Then
                    If YPos > -30 Then
                        HeadlineText.neuerText(New String() {Abschnitte(I).Headline}, Abschnitte(I).StartX(0), YPos, New Color() {Color.Gold})
                        HeadlineText.Malen(New Point)
                    End If
                    YPos += 30
                Else
                    If YPos > -30 Then
                        Dim R As Integer = 0
                        Math.DivRem(I2, 2, R)
                        Dim FontColor() As Color = New Color() {Color.MistyRose}
                        If Abschnitte(I).Autoren(I2 - 1).ToLower.StartsWith("robosturm") Then
                            FontColor(0) = Color.Red
                        ElseIf Abschnitte(I).Autoren(I2 - 1).ToLower.StartsWith("eagle") Then
                            FontColor(0) = Color.Red
                        ElseIf R = 0 Then
                            FontColor(0) = Color.Blue
                        Else
                            FontColor(0) = Color.Green
                        End If
                        AutorenText.neuerText(New String() {Abschnitte(I).Autoren(I2 - 1)}, Abschnitte(I).StartX(I2), YPos, FontColor)
                        AutorenText.Malen(New Point)
                    End If
                    YPos += 20
                End If
                If YPos > DataSettings.BildschirmHoehe Then
                    Exit For
                End If
            Next
            If YPos > DataSettings.BildschirmHoehe Then
                Exit For
            End If
        Next

        MyBase.ObjekteMalen()
    End Sub

    Public Overrides Sub MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Select Case e.Button
            Case Windows.Forms.MouseButtons.Left
                checkMouseDownObjekte(ObjektMaus.XKoordinate, ObjektMaus.YKoordinate)
        End Select
    End Sub

    Public Overrides Sub MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        MouseMoveObjekte(e.X, e.Y)
    End Sub

    Public Overrides Sub MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Select Case e.Button
            Case Windows.Forms.MouseButtons.Left
                ButtonGeklicktLinks(checkMouseUPObjekte(ObjektMaus.XKoordinate, ObjektMaus.YKoordinate))
        End Select
    End Sub
    Public Sub ButtonGeklicktLinks(ByVal Effekt As String)
        If Effekt = Nothing Then
            Exit Sub
        End If
        Select Case Effekt.ToLower
            Case "beenden"
                Hauptmenue.Ini(Hauptmenue.Formmodi.Hauptmenue)
        End Select
    End Sub
    Public Overrides Sub MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    End Sub

    Public Overrides Sub SetMausBild()
        ObjektMaus.Zustand = ObjektMaus.Zustaende.Menue
    End Sub

    Public Overrides Sub SprachEingabe(ByVal Eingabe As String)

    End Sub
    Public Overrides Sub ChangeWindowSize(ByVal PosChange As System.Drawing.Point)
        ChangeWindowSizeObjekte(PosChange)
        YMax = Math.DivRem(DataSettings.BildschirmHoehe, 16, 0)
        XMax = Math.DivRem(DataSettings.BildschirmBreite, 16, 0)
        HeadlinePosition += PosChange.X * 0.5#
        Dim TextZahl As Integer = 0
        For Each AB In Abschnitte
            AB.WindowSizeChange(PosChange.X * 0.5#)
            TextZahl += AB.Autoren.Length + 1
        Next

        FramesProText = DataSettings.BildschirmHoehe / 2
        FramesMax = FramesProText + (TextZahl) * 10
    End Sub

    Public Overrides Sub KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)

    End Sub
End Class
